vtd: fix Dom0 S3 when VT-d is enabled.
authorKeir Fraser <keir.fraser@citrix.com>
Fri, 29 Aug 2008 15:16:33 +0000 (16:16 +0100)
committerKeir Fraser <keir.fraser@citrix.com>
Fri, 29 Aug 2008 15:16:33 +0000 (16:16 +0100)
commit47bdb3b05f41c6bee43e91ce7a23df218fe05e69
tree51eef72806fe9a8c4d48f2cf56b16c4075e2b945
parent8565e53aba37c480486ba3b7ba6c00688d152360
vtd: fix Dom0 S3 when VT-d is enabled.

Now if VT-d is enabled, when Dom0 does S3, Xen doesn't suspend/resume
the IOMMU states.

The patch adds the missing invocations of
iommu_suspend()/iommu_resume() and makes some nesessary fixes:
1) In iommu_set_root_entry(), we should not re-allocate the root-entry
when Xen returns from S3;
2) Define the array iommu_state correctly (u8 -> u32);
3) Only save/restore the necessary IOMMU registers.

The patch was tested on Weybridge.

NOTE: if we have some HVM guests which have assigned devices, and we
want to do Dom S3, we MUST do HVM S3 for each HVM guest first.
Namely, the steps are:
1) Use HVM S3 in guest to suspend the guest (for example, in Linux HVM
guest, this is "echo mem > /sys/power/state");
2) Use Dom0 S3 to suspend Dom0: "echo mem > /sys/power/state";
3) At some point, Dom0 resumes from S3 (for example, by pressing the
power button or using the acpi alarm);
4) Use "xm trigger HVM_DOM_ID s3resume" to resume every HVM guest
which were suspended previously.

Signed-off-by: Dexuan Cui <dexuan.cui@intel.com>
xen/arch/x86/acpi/power.c
xen/drivers/passthrough/vtd/iommu.c
xen/include/xen/iommu.h